<?php


namespace App\Helpers;

use Illuminate\Support\Facades\Log;

class SnHelper
{
    /**
     * 为支付接口生成流水号
     * $type
     * 1为请求流水号(默认)
     * 2为民生请求流水号(32位)
     *
     * 唯一，推荐使用合作方代码+YYYYMMDD+10位序列号
     * 0为订单号
     * 商户的out trade no、out_refund_no 必须全局唯一，调试和生产环境，都需要使用唯一的订单号。
     *
     * 生成规则：
     * 合作方代码（4位）+年月日时分秒（yyyyMMddhhmmss共14位）+外联单位序列（14位）
     * 外联单位序列（14位）= 店铺id(后 5 位) + 9 位随机数
     *
     * @param     $partner_code
     * @param int $appId
     * @param int $type
     * @return string
     */
    public static function createSerialNo($partner_code,$appId=0,$type=1) {
        if($type==1){
            $data=$partner_code.date('Ymd',time()).substr(self::getMillisecond(),3,10);
        }elseif($type==2){
            $data=$partner_code.date('Ymd',time()).substr(self::getMillisecond(),-8);
        }else{
            if(strlen($appId)>5){
                $appId=substr($appId,-5);
            }else{
                $appId=sprintf("%05d", intval($appId));
            }
            $data=$partner_code.date('YmdHis',time()).$appId.substr(self::getMillisecond(),-9);
        }
        return $data;
    }

    /**
     * 生成微妙数
     *
     * @param int $type 1:用于生成流水 0:用于日志记录
     * @return float|int|string
     */
    public static function getMillisecond($type = 1) {
        list($t1, $t2) = explode(' ', microtime());
        if($type == 1){
            return (string) intval($t1 * 1000000) + random_int(10000,99999) * 100000;
        }else{
            return ((float)$t1 + (float)$t2);
        }

    }

    /**
     * 支付日志生成
     * $file 记录文件路径
     * $title 标题
     * $data 数据
     */
    public static function dataRecodes($file = 'result.txt',$title,$data){
        $content = "================".$title."===================\n";
        if(is_string($data) === true){
            $content .= $data."\n";
        }
        if(is_array($data) === true){
            forEach($data as $k=>$v){
                $content .= "key: ".$k." value: ".$v."\n";
            }
        }
        $content .= date('Y-m-d H:i:s')."\n";
        return @file_put_contents($file,$content.PHP_EOL,FILE_APPEND | LOCK_EX);
    }

    /**
     * 日志记录
     *
     * @param     $title
     * @param     $msg
     * @param int $type 1系统自带方法 2自定义方法
     */
    public static function logFun($title,$msg,$type = 1)
    {
        $content = $title.':';
        if(is_string($msg) === true){
            $content .= $msg."\n";
        }
        if(is_array($msg) === true){
            $content .= json_encode($msg, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
        }

        switch ($type){
            case 1:
                Log::debug($content);
                break;
            case 2:
                app('record')->log($content);
                break;
        }
    }
}